gdk-wayland: Do not leak dummy 1x1 surface on every draw
authorDaniel Elstner <daniel.kitta@gmail.com>
Tue, 26 Sep 2017 19:13:40 +0000 (21:13 +0200)
committerDaniel Elstner <daniel.kitta@gmail.com>
Tue, 26 Sep 2017 19:14:21 +0000 (21:14 +0200)
When using EGL, neither leak nor re-create the dummy 1x1 Cairo
surface every time gdk_wayland_window_ensure_cairo_surface()
is called.

https://bugzilla.gnome.org/show_bug.cgi?id=775126

gdk/wayland/gdkwindow-wayland.c

index 5395e842764d39759ae3a561aa4f221deb25a294..50d6bd36b5058d4c0390dee964327056f37fa6b2 100644 (file)
@@ -813,13 +813,16 @@ gdk_wayland_window_ensure_cairo_surface (GdkWindow *window)
     {
       if (impl->staging_cairo_surface &&
           _gdk_wayland_is_shm_surface (impl->staging_cairo_surface))
-        cairo_surface_destroy (impl->staging_cairo_surface);
+        g_clear_pointer (&impl->staging_cairo_surface, cairo_surface_destroy);
 
-      impl->staging_cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-                                                                impl->scale,
-                                                                impl->scale);
-      cairo_surface_set_device_scale (impl->staging_cairo_surface,
-                                      impl->scale, impl->scale);
+      if (!impl->staging_cairo_surface)
+        {
+          impl->staging_cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                                                    impl->scale,
+                                                                    impl->scale);
+          cairo_surface_set_device_scale (impl->staging_cairo_surface,
+                                          impl->scale, impl->scale);
+        }
     }
   else if (!impl->staging_cairo_surface)
     {